package 多线程.Test;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // 桌子数
        int m = sc.nextInt(); // 客人批次

        // 读取桌子容量
        int[] tables = new int[n];
        for (int i = 0; i < n; i++) {
            tables[i] = sc.nextInt();
        }

        // 读取客人批次
        int[][] guests = new int[m][2];
        for (int i = 0; i < m; i++) {
            guests[i][0] = sc.nextInt(); // 人数
            guests[i][1] = sc.nextInt(); // 消费金额
        }

        // 按桌子容量从小到大排序
        Arrays.sort(tables);

        // 按消费金额从大到小排序，如果消费金额相同，则按人数从小到大排序
        Arrays.sort(guests, (a, b) -> {
            if (b[1] != a[1]) {
                return b[1] - a[1]; // 按消费金额降序
            } else {
                return a[0] - b[0]; // 按人数升序
            }
        });

        // 记录桌子是否被占用
        boolean[] used = new boolean[n];
        long total = 0; // 总消费金额

        // 遍历客人批次
        for (int[] guest : guests) {
            int people = guest[0]; // 当前批次人数
            int cost = guest[1];   // 当前批次消费金额

            // 找到第一个能容纳当前批次的桌子
            int index = findTable(tables, used, people);
            if (index != -1) {
                used[index] = true; // 标记桌子为已占用
                total += cost;      // 累加消费金额
            }
        }

        System.out.println(total);
    }

    // 二分查找第一个能容纳当前批次的桌子
    private static int findTable(int[] tables, boolean[] used, int people) {
        int left = 0;
        int right = tables.length - 1;
        int result = -1;

        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (tables[mid] >= people) {
                result = mid; // 记录满足条件的桌子
                right = mid - 1; // 继续向左查找更小的桌子
            } else {
                left = mid + 1; // 向右查找
            }
        }

        // 找到第一个未被占用且满足条件的桌子
        while (result != -1 && result < tables.length) {
            if (!used[result] && tables[result] >= people) {
                return result;
            }
            result++;
        }

        return -1; // 没有找到合适的桌子
    }
}